I use library "method-override" on my form
<form method="post" action="/book/{{book._id}}/update?_method=PUT" class="">
...
</form/>
and I cannot upload file with method [PUT]
this is my multer:
const multer = require('multer');
const storage = multer.diskStorage({
destination(req, file, cb) {
cb(null, './public/images/');
},
filename(req, file, cb) {
const uniqueSuffix = `${Date.now()}-${Math.round(Math.random() * 1E9)}`;
cb(null, `${file.fieldname}-${uniqueSuffix}-${file.originalname}`);
},
});
module.exports = multer({ storage });
this is my router:
const bookController = require('../app/controllers/BookController');
const upload = require('../middle/uploadImage');
router.post('/stored', upload.single('image'), bookController.stored); // create
router.put('/:id/update', upload.single('image'), bookController.update);// update
and my controler:
// [PUT] / book/:id/edit
// eslint-disable-next-line class-methods-use-this
async update(req, res, next) {
let { file, body } = req;
let image;
console.log(file); // undefined
if (file) {
image = await uploadFile(file.path, file.filename);
}
body = { ...body, image };
Book.updateOne({ _id: req.params.id }, body)
.then(() => {
res.redirect('/stored/books');
})
.catch((err) => next(err));
}
and I cannot get file from controller